// 定义用户信息类型接口
export interface UserInfo {
  id?: number | string
  name?: string
  token?: string // token
  [key: string]: any // 允许其他扩展属性
}

// 存储键名
export const STORAGE_KEY = {
  // 用户信息
  USER_INFO: 'KCS_USER_INFO',
  LOGIN_NAME: 'KCS_LOGIN_NAME',
  LOGIN_PHONE: 'KCS_LOGIN_PHONE',
  // 主题
  THEME: 'theme',
  // 语言
  LANGUAGE: 'language',
  // 认证头
  AUTH_HEADER: 'Authorization'
}
/**
 * 设置认证信息到 localStorage
 * @param userInfo - 认证信息对象
 */
export function setUserInfo(userInfo: UserInfo): void {
  try {
    // 将对象转为JSON字符串存储
    const jsonStr = JSON.stringify(userInfo)
    console.log(jsonStr,'jsonStrjsonStr')
    localStorage.setItem(STORAGE_KEY.USER_INFO, jsonStr)
  } catch (error) {
    console.error('保存认证信息失败:', error)
    throw new Error('认证信息存储失败')
  }
}

/**
 * 从 localStorage 获取认证信息
 * @returns 解析后的认证信息对象，若不存在则返回 null
 */
export function getUserInfo(): UserInfo {
  try {
    const jsonStr = localStorage.getItem(STORAGE_KEY.USER_INFO)
    if (!jsonStr) return {}

    // 解析JSON字符串
    const userInfo: UserInfo = JSON.parse(jsonStr)
    // 验证必要字段
    if (!userInfo.token) {
      removeUserInfo()
      return {}
    }

    return userInfo
  } catch (error) {
    console.error('读取认证信息失败:', error)
    // 解析失败时清除损坏的数据
    removeUserInfo()
    return {}
  }
}

/**
 * 从 localStorage 移除认证信息
 */
export function removeUserInfo(): void {
  localStorage.removeItem(STORAGE_KEY.USER_INFO)
}

/**
 * 获取认证令牌
 * @returns 认证令牌字符串，若不存在则返回空字符串
 */
export function getToken(): string {
  const userInfo = getUserInfo()
  return userInfo?.token || ''
}
/**
 * 设置登录名
 * @returns
 */
export function setLoginName(str: string) {
  if (str) {
    localStorage.setItem(STORAGE_KEY.LOGIN_NAME, str)
  } else {
    localStorage.removeItem(STORAGE_KEY.LOGIN_NAME)
  }
}
export function getLoginName(): string {
  return localStorage.getItem(STORAGE_KEY.LOGIN_NAME) || ''
}

/**
 * 设置登录phone
 * @returns
 */
export function setLoginPhone(str: string) {
  if (str) {
    localStorage.setItem(STORAGE_KEY.LOGIN_PHONE, str)
  } else {
    localStorage.removeItem(STORAGE_KEY.LOGIN_PHONE)
  }
}
export function getLoginPhone(): string {
  return localStorage.getItem(STORAGE_KEY.LOGIN_PHONE) || ''
}
